home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
dev
/
asm
/
TBSource.lha
/
Texter
/
Texter.S
Wrap
Text File
|
1993-07-02
|
7KB
|
392 lines
*************************************************
* *
* (C)opyright 1991 *
* *
* by Tomi Blinnikka *
* *
* Texter testing cos' I'm bored *
* *
* Version 0.01a 16/07/1991 *
* *
* BUGS: Not finished *
* *
* Version 0.01b 28/07/1992 *
* *
* Added CTRL_C check and changed alot of other *
* stuff. *
* *
*************************************************
INCLUDE "JMPLibs.i"
INCLUDE "libraries/dos.i"
INCLUDE "XREF:2.0.xref"
INCLUDE "XREF:dos.xref"
INCLUDE "XREF:exec.xref"
section Texter,CODE
Start: move.l a0,FileAddress ;get filename
clr.b -1(a0,d0.l) ;add null to end of filename
openlib Dos,ShutDown
move.l _DosBase(pc),_DOSBase
move.l $4,_SysBase
lib Dos,Output
move.l d0,_stdout
beq ShutDown
move.l FileAddress(pc),a0
tst.b (a0)
beq NoFName
move.l FileAddress(pc),a0
cmp.b #'"?',(a0)
beq CmdLineHelp
cmp.w #'-?',(a0)
beq CmdLineHelp
cmp.b #'h',(a0)
beq CmdLineHelp
cmp.w #'-h',(a0)
beq CmdLineHelp
move.l FileAddress(pc),d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
move.l d0,TextFile
beq FileError
move.l TextFile(pc),d1 ;Get length of file.
move.l #00,d2
move.l #01,d3
lib Dos,Seek
move.l TextFile(pc),d1
lib Dos,Seek
tst.l d0
beq ZeroLength
move.l d0,d6
move.l TextFile(pc),d1
move.l #00,d2
move.l #-1,d3
lib Dos,Seek
lea.l FileBuffer(pc),a0
move.l a0,a4
move.l #$00,d5
;Start of loop.
StartLoop: clr.l d1
bset.l #SIGBREAKB_CTRL_C,d1 ;check for CTRL_C
lib Dos,CheckSignal
btst.l #SIGBREAKB_CTRL_C,d0
bne Break
move.l TextFile(pc),d1
move.l a4,d2
move.l #1,d3
lib Dos,Read
tst.l d0
beq FileError
bsr CheckInput
cmp.w #00,Status
beq ContWriting
bra TestEnd
ContWriting: move.l _stdout(pc),d1
move.l a4,d2
lib Dos,Write ; d3=1
bsr Delay
TestEnd: cmp.l d5,d6
bne StartLoop
ShutDown: tst.l TextFile
beq ShutDown9000
move.l TextFile(pc),d1
lib Dos,Close
move.l #$00,TextFile
ShutDown9000: bsr DoPlain
closlib Dos
ShutDown2000:
ShutDownOut: move.l #RETURN_OK,d0
rts
CheckInput: add.l #01,d5
cmp.w #$02,Status ;Returning to noneffect.
beq ClearStatus
cmp.w #01,Status ;In effect mode?
bne NoEffect1
cmp.b #$1b,(a4)
bne Effect1
move.w #$02,Status
rts
Effect1: cmp.b #'0',(a4)
bne Effect1.1
move.w #$00,Speed
rts
Effect1.1: cmp.b #'1',(a4)
bne Effect1.2
move.w #$01,Speed
rts
Effect1.2: cmp.b #'2',(a4)
bne Effect1.3
move.w #$02,Speed
rts
Effect1.3: cmp.b #'3',(a4)
bne Effect1.4
move.w #$03,Speed
rts
Effect1.4: cmp.b #'d',(a4)
bne Effect2
bsr Delay
rts
Effect2: cmp.b #'b',(a4)
bne Effect3
bsr BoldOn
rts
Effect3: cmp.b #'i',(a4)
bne Effect4
bsr ItalicOn
rts
Effect4: cmp.b #'u',(a4)
bne Effect5
bsr UnderLineOn
rts
Effect5: cmp.b #'r',(a4)
bne Effect6
bsr ReverseOn
rts
Effect6: cmp.b #'p',(a4)
bne Effect7
bsr Plain
rts
Effect7: cmp.b #'c',(a4)
bne Effect8
bsr CursorOff
rts
Effect8: cmp.b #'C',(a4)
bne Effect9
bsr CursorOn
rts
Effect9: cmp.b #'!',(a4)
bne Effect10
bsr ClearCLI
rts
Effect10: rts
ClearStatus: move.w #$00,Status
rts
NoEffect1: cmp.b #$1b,(a4)
bne NoEffect2
move.w #01,Status
NoEffect2: rts
Delay: cmp.w #00,Speed
beq Delay_OUT
cmp.w #01,Speed
bne Delay1
move.l #1,d1
Delay1: cmp.w #02,Speed
bne Delay2
move.l #3,d1
Delay2: cmp.w #03,Speed
bne Delay3
move.l #5,d1
Delay3: lib Dos,Delay
Delay_OUT: rts
DoPlain: lea.l PlainText1,a0
bsr Printer
lea.l CursorOnText1,a0
bsr Printer
rts
Plain: lea.l PlainText1,a0
bsr Printer
rts
BoldOn: lea.l BoldOnText1,a0
bsr Printer
rts
ItalicOn: lea.l ItalicOnText1,a0
bsr Printer
rts
UnderLineOn: lea.l UnderLineOnText1,a0
bsr Printer
rts
ReverseOn: lea.l ReverseOnText1,a0
bsr Printer
rts
CursorOn: lea.l CursorOnText1,a0
bsr Printer
rts
CursorOff: lea.l CursorOffText1,a0
bsr Printer
rts
ClearCLI: lea.l ClearCLIText1,a0
bsr Printer
rts
CmdLineHelp: lea.l UsageText1,a0
bsr Printer
bra ShutDown
Break: bsr DoPlain
lea.l CRLFText1,a0
bsr Printer
lea.l BreakText1,a0
bsr Printer
bra ShutDown
NoFName: lea.l ErrorText1,a0
bsr Printer
lea.l NoFNameText1,a0
bsr Printer
bra ShutDown
ZeroLength: lea.l ErrorText1,a0
bsr Printer
lea.l LengthText1,a0
bsr Printer
bra ShutDown
Printer: ;tst.w Quiet
;beq Printer1
printa a0
Printer1: rts
FileError: lib Dos,IoErr
cmp.l #ERROR_NO_FREE_STORE,d0
bne CNOC1
lea.l NoFreeSText1,a0
bra FileError_OUT
CNOC1: cmp.l #ERROR_TASK_TABLE_FULL,d0
bne CNOC2
lea.l TaskTFullText1,a0
bra FileError_OUT
CNOC2: cmp.l #ERROR_LINE_TOO_LONG,d0
bne CNOC3
lea.l LineLongText1,a0
bra FileError_OUT
CNOC3: cmp.l #ERROR_OBJECT_IN_USE,d0
bne CNOC4
lea.l ObjInUseText1,a0
bra FileError_OUT
CNOC4: cmp.l #ERROR_OBJECT_NOT_FOUND,d0
bne CNOC5
lea.l FileNotFText1,a0
bsr Printer
printa FileAddress(pc)
lea.l CRLFText1,a0
bra FileError_OUT
CNOC5: cmp.l #ERROR_DISK_NOT_VALIDATED,d0
bne CNOC6
lea.l NValidatText1,a0
bra FileError_OUT
CNOC6: cmp.l #ERROR_DEVICE_NOT_MOUNTED,d0
bne CNOC7
lea.l NMountText1,a0
bra FileError_OUT
CNOC7: cmp.l #ERROR_READ_PROTECTED,d0
bne CNOC8
lea.l ReadProText1,a0
bra FileError_OUT
CNOC8: cmp.l #ERROR_NOT_A_DOS_DISK,d0
bne CNOC9
lea.l NDosText1,a0
bra FileError_OUT
CNOC9: cmp.l #ERROR_NO_DISK,d0
bne CNOC10
lea.l NDiskText1,a0
bra FileError_OUT
CNOC10: lea.l FileErrorText1,a0
bra FileError_OUT
FileError_OUT: bsr Printer
bra ShutDown
;Structures
;Library stuff (well what's needed anymore)
libnames
_DOSBase: dc.l 0
_SysBase: dc.l 0
;File stuff
_stdout: dc.l 0
FileAddress: dc.l 0
TextFile: dc.l 0
FileBuffer: dc.b 0,0
;Other stuff XIV
Status: dc.w 0 ;0=Not in Effect mode, 1=In effect mode
Speed: dc.w 0 ;0=Off, 1=Fast, 2=Medium, 3=Slow
dc.b "$VER: Texter 0.01b (27.7.92)",0
UsageText1: dc.b "Texter 0.01b (C)opyright 1991-92 Tomi Blinnikka",13,10,13,10
dc.b "USAGE: Texter [Filename]",13,10,13,10
dc.b " Where: [Filename] is the file to be printed.",13,10,13,10,0
;Effects
ClearCLIText1: dc.b $0c,0
PlainText1: dc.b $9b,$30,$6d,0
BoldOnText1: dc.b $9b,$31,$6d,0
ItalicOnText1: dc.b $9b,$33,$6d,0
UnderLineOnText1: dc.b $9b,$34,$6d,0
ReverseOnText1: dc.b $9b,$37,$6d,0
CursorOnText1: dc.b $9b,$20,$70,0
CursorOffText1: dc.b $9b,$30,$20,$70,0
;Error texts
NoFNameText1: dc.b "No filename given.",13,10,0
LengthText1: dc.b "File length equals zero.",13,10,0
ErrorText1: dc.b "ERROR: ",0
NoFreeSText1: dc.b "No free store",13,10,0
TaskTFullText1: dc.b "Task table full",13,10,0
LineLongText1: dc.b "Line too long",13,10,0
ObjInUseText1: dc.b "Object in use",13,10
FileNotFText1: dc.b "File not found",13,10,"Filename was: ",0
NValidatText1: dc.b "Disk not validated",13,10,0
NMountText1: dc.b "Device not mounted",13,10,0
ReadProText1: dc.b "File is read protected",13,10,0
NDosText1: dc.b "Not a dos disk",13,10,0
NDiskText1: dc.b "No disk in drive",13,10,0
FileErrorText1: dc.b "Sorry, file error",13,10,0
CRLFText1: dc.b 13,10,0
BreakText1: dc.b "***Break",13,10,0
ds.l 0
END
Effect1: cmp.w #'d0',(a4)
bne Effect1.1
move.w #$00,Speed
bsr Delay
rts
Effect1.1: cmp.w #'d0',(a4)
bne Effect1.2
move.w #$01,Speed
bsr Delay
rts
Effect1.2: cmp.w #'d0',(a4)
bne Effect1.3
move.w #$02,Speed
bsr Delay
rts
Effect1.3: cmp.w #'d0',(a4)
bne Effect2
move.w #$03,Speed
bsr Delay
rts